package cn.bugstack.springframework.context;

import cn.bugstack.springframework.beans.factory.HierarchicalBeanFactory;
import cn.bugstack.springframework.beans.factory.ListableBeanFactory;
import cn.bugstack.springframework.core.io.ResourceLoader;

/**
 * ApplicationContext 接口继承了 ListableBeanFactory 接口是为了提供对应用程序上下文中的所有 Bean 进行列表化操作的能力。
 * ListableBeanFactory 定义了一组方法，用于获取应用程序上下文中所有 Bean 的名称、类型和实例等信息。
 * 通过这些方法，开发人员可以方便地遍历和操作应用程序上下文中的所有 Bean，实现了对 Bean 的更加灵活的管理和使用。
 *
 * 我们的目的是开发Spring的上下文类，将相应的XML文件的加载、注册、实例化及新增的修改和扩展功能全部融合进去，
 * 使得Spring可以自动扫描到新增的服务，便于用户使用。
 *
 * 从继承ListableBeanFactory接口的ApplicationContext接口开始，扩展出一系列应用上下文的抽象实现类，
 * 并最终完成ClassPathXmlApplicationContext类的实现。这个类就是用户最后使用的类。
 *
 * 同时，在实现应用上下文的过程中，通过定义BeanFactoryPostProcessor、BeanPostProcessor两个接口，实现对Bean对象的扩展机制。
 * ApplicationContext继承于ListableBeanFactory，即继承了关于BeanFactory方法，如getBean的一些方法。由于ApplicationContext
 * 本身是接口，但目前不需要添加获取ID和父类上下文的方法，所以暂时没有该接口的方法定义。
 */
public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory, ResourceLoader, ApplicationEventPublisher {

}
